import random
from collections import Counter

print("\n Добро пожаловать в игру 'Жадюги'!")
print("""\n___________________________________ПРАВИЛА ИГРЫ "ЖАДЮГА"________________________________________
      "Жадюга" основана на одноимённой настольной игре. Это азартная игра на удачу и проверку жадности. 
      Ваша цель достать из мешочка 5 золотых. Каждый раунд вы тащите из мешка камни до тех пор,
      пока не вытащите 2 одинаковых булыжника (черные, серые и белые камни). При этом вы сбросите
      все камни, которые достали в этом раунде, обратно в мешок. Если же вы сами остановите свой 
      раунд, то можете сохранить накопленное в этом раунде золото и отложить его в неприкосновенное 
      хранилице. Если у вас закончатся раунды - вы проиграли. Вытащив красный камень вы потеряете 
      1 раунд из копилки раундов, а вытащив зелёный - наоборот, получите в копилку 2 раунда. 
      В начале игры вы самостоятельно устанавливаете ставку в раундах - за сколько попыток вы
      готовы достать 5 золотых камней. Желаем удачи! """)

hand = []
stock = []
bag = []

def new_bag():
    bag = [
        "красный🔴", "зелёный🟢", #красный камень отнимает а зеленый добавляет раунды игроку
        "чёрный⬛", "чёрный⬛", "чёрный⬛", "чёрный⬛",
        "белый🔲", "белый🔲", "белый🔲", "белый🔲", 
        "серый🔘", "серый🔘", "серый🔘", "серый🔘", 
        "золотой 🟡", "золотой 🟡", "золотой 🟡", "золотой 🟡", "золотой 🟡",
        ]
    random.shuffle(bag)
    return bag

def harvest(bag):
    current = bag.pop()
    print(f'\nВам попался < {current} > камень ')
    hand.append(current)
    print (f'\n В руке сейчас: {hand}')
    return hand

def new_hand():
    hand = []
    print (f'\n В руке осталось: {hand}')
    return hand

def main_game_loop():
    
    try:
        attempt = int(input('\nВведите ставку в раундах: \n'))
    except Exception as e:
        print(f'\nВы ввели не число, попробуйте ещё раз.')
        return main_game_loop()

    hand = new_hand()
    bag = new_bag()
    stock = []
    red_jem = False
    green_jem = False   
    while True:
        random.shuffle(bag)
        if attempt == 0:
                print("Игра закончена - Вы израсходовали все попытки.")
                ask_again()
        
        choice = input("\n Будете брать камень? (да/нет) \n")

        if choice == "да":
            
            hand = harvest(bag)

            c = Counter(hand)
            if c['чёрный⬛'] >= 2 or c['белый🔲'] >= 2 or c['серый🔘'] >= 2:
                print("Раунд закончен - у вас 2 булыжника и вы сбрасываете руку.")
                attempt -= 1
                if red_jem: attempt -= 1
                if green_jem: attempt += 1
                hand1 = hand.copy()
                bag = bag + hand1
            
                print(f'\n Осталось раундов - {attempt}')
                #print (f'\n В мешке сейчас: {bag}')
                hand.clear()
            elif "красный🔴" in hand:
                red_jem = True
                print(f'Красный камень отнимет 1 раунд. Продолжаем...')
            elif "зелёный🟢" in hand:
                green_jem = True
                print(f'Зелёный камень даст 2 дополнительных раунда. Продолжаем...')
            else:
                print(f'Продолжаем...')

        elif choice == "нет":
                    
            
            stock = stock + hand
            stock = [x for x in stock if x== 'золотой 🟡'] # формула для фильтрации списка; используй != чтобы удалить,а не оставить

            print(f'\n В вашем хранилище теперь {stock}') 
            attempt -= 1
            if red_jem: attempt -= 1
            if green_jem: attempt += 1
            hand1 = hand.copy()
            bag = bag + hand1
            
            

            if stock == ['золотой 🟡','золотой 🟡', 'золотой 🟡', 'золотой 🟡', 'золотой 🟡']:
                print("\n У вас 5 золотых и вы ✨✨ПОБЕДИЛИ✨✨.")
                break

            c = Counter(hand)
            
            if c['золотой 🟡'] == 1:
                bag.remove('золотой 🟡')
            elif c['золотой 🟡'] == 2:
                bag.remove('золотой 🟡')
                bag.remove('золотой 🟡')
            elif c['золотой 🟡'] == 3:
                bag.remove('золотой 🟡')
                bag.remove('золотой 🟡')
                bag.remove('золотой 🟡')
            elif c['золотой 🟡'] == 4:
                bag.remove('золотой 🟡')
                bag.remove('золотой 🟡')
                bag.remove('золотой 🟡') 
                bag.remove('золотой 🟡')  

            print(f'\n Осталось раундов - {attempt}')
            #print (f'\n В мешке сейчас: {bag}')
            hand.clear()

def ask_again():
    choice = input("\nХотите сыграть ещё раз? (да/нет) \n")
    if choice == "да":
        main_game_loop()
    elif choice == "нет":
        print("Спасибо за игру!")
        exit()
    else:
        print("Неверный ввод. Попробуйте ещё раз.")
        ask_again()

     
           
while True:
    main_game_loop()
    ask_again()



